package org.baixin.manager;

import java.io.Serializable;
import java.util.List;

import org.baixin.core.Page;
import org.baixin.core.PropertyFilter;

/**
 * 
 * 
 * 所有manager基类。
 * 
 * @author slaton.wu@gmail.com
 * @version 1.0
 * @created 2011-6-19 下午02:00:33
 */

public interface BaseManager<T, PK extends Serializable> {

	/**
	 * 
	 * 根据ID 获取实体对象
	 * 
	 * @param id
	 * @return
	 */
	public T get(PK id);

	/**
	 * 
	 * 根据主键删除实体对象
	 * 
	 * @param id
	 */
	public void delete(PK id);

	/**
	 * 
	 * 更新实体对象
	 * 
	 * @param t
	 * @return
	 */
	public void update(T t);

	/**
	 * 
	 * 添加实体对象
	 * 
	 * @param t
	 * @return
	 */
	public T add(T t);

	/**
	 * 
	 * 分页获取实体对象
	 * 
	 * @param page
	 * @return
	 */
	public Page<T> getAll(Page<T> page);

	/**
	 * 
	 * 根据条件筛选
	 * 
	 * @param propertyFilters
	 * @return
	 */
	public Page<T> search(Page<T> page, List<PropertyFilter> filters);

	/**
	 * 
	 * 根据条件筛选
	 * 
	 * @param filters
	 * @return
	 */
	public List<T> getList(List<PropertyFilter> filters);

	/**
	 * 
	 * 查询所有对象列表
	 * 
	 * @return
	 */
	public List<T> getAll();

	/**
	 * 按属性查找对象列表, 匹配方式为相等.
	 * 
	 * @param property
	 * @param value
	 * @return
	 */
	public List<T> getAll(String property, Object value);
}
